/* 309. 最佳买卖股票时机含冷冻期 */
/**
 * @param {number[]} prices
 * @return {number}
 */
/* dp */
var maxProfit = function (prices) {
    const n = prices.length
    /* 
        hold[i]:第i天手中持有股票的最大收益
        有两种可能：
            1:昨天就有股票，今天休息
            2:前天卖了股票，今天买了股票
    */
    let hold = new Array(n).fill(0)
    /* 
        目标:
        unhold[i] 第i天手中不持有股票，此时的利润最大
        有两种可能:
            1:昨天有股票，今天卖了股票
            2:昨天也没有持有，今天休息
    */
    let unhold = new Array(n).fill(0)
    /* 
        第0天买入股票 收益 -price[0] 元 
        hold[1]:
            可能是昨天买的，今天休息
            也可能是昨天休息，今天买入
        第0天没有持有股票收益 :0元
    */
    hold[0] = -prices[0]
    unhold[0] = 0
    for (let i = 1; i < n; i++) {
        if (i == 1) {
            hold[i] = Math.max(hold[i - 1], -prices[1])
        } else {
            hold[i] = Math.max(hold[i - 1], unhold[i - 2] - prices[i])
        }

        unhold[i] = Math.max(unhold[i - 1], hold[i - 1] + prices[i])
    }
    return unhold[n - 1]
};

/*
    状态机
    s0:手中持没有持有，可以买[买 / 休息]
    s1:手中持有,可以卖[卖 / 休息]
    s2:手中没有持有，买不了[休息]
*/

// var maxProfit = function (prices) {
//     let rest = 0, sold = 0, hold = -Infinity // 还没有买入
//     for (const price of prices) {
//         let preSold = sold, preHold = hold
//         hold = Math.max(preHold, rest - price) // 买
//         sold = preHold + price // 卖
//         rest = Math.max(rest, preSold) // 休息
//     }

//     return Math.max(rest, sold)
// }

const result = maxProfit([1, 2, 3, 0, 2])
console.log('maxProfit :>>', result);